package cn.mntool.ftp.core;

import cn.mntool.ftp.exception.UploadException;
import com.jcraft.jsch.JSchException;

import java.io.File;

/**
 * describe: ftp管理类，包含了常用的方法。
 *
 * @author lianying
 * @date 2018/12/13
 */
public abstract class FtpManager {
    /**
     * 上传文件或者目录
     *
     * @param localPath  本地路径
     * @param remotePath 远程路径
     * @return
     */
    public abstract boolean upload(String localPath, String remotePath) throws UploadException;

    /**
     * 上传文件
     *
     * @param localFile 本地文件
     * @param remotePath
     * @return
     */
    protected abstract boolean uploadFile(File localFile, String remotePath);

    /**
     * 上传目录
     *
     * @param localFile
     * @param remotePath
     * @return
     */
    protected abstract boolean uploadDir(File localFile, String remotePath);

    /**
     * 创建多级目录
     *
     * @param dirPath
     * @return
     */
    public abstract boolean mkdirs(String dirPath);

    /**
     * 删除文件或者删除文件夹
     *
     * @param filePath
     * @return
     */
    public abstract boolean delete(String filePath);
    /**
     * 删除文件
     *
     * @param filePath
     * @return
     */
    public abstract boolean deleteFile(String filePath);
    /**
     * 删除文件夹
     *
     * @param dirPath
     * @return
     */
    public abstract boolean deleteDir(String dirPath);

    /**
     * 创建单级目录
     *
     * @param dirPath
     * @return
     */
    public abstract boolean mkdir(String dirPath);

    /**
     * 下载
     *
     * @param remotePath 远程路径
     * @param localPath  本地路径
     * @return
     */
//    public abstract File download(String remotePath, String localPath);

    /**
     * 判断该路径是否是文件夹
     *
     * @param remotePath
     * @return
     */
    public abstract boolean dirExist(String remotePath);

    /**
     * 登录
     *
     * @return
     */
    public abstract boolean login() throws JSchException;

    /**
     * 切换至该目录下
     *
     * @return
     */
    public abstract boolean cd(String remotePath);

    /**
     * 登出
     */
    public abstract void logOut();

    /**
     * 连接ftp服务器
     *
     * @return
     */
    public abstract boolean connect() throws JSchException;
}
